package com.itwelkin;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class MyMessage implements ChannelAwareMessageListener { // MessageListener

    @Override
    public void onMessage(Message message, Channel channel) throws IOException {
        // 1:接收消息；2：调用basicAck方法
        System.out.println(new String(message.getBody()));
        try{
            int i = 10 / 0;
            // 如果业务逻辑处理成功，那么进行签收；反之拒收；
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), true); // 1.投递标识；2.是否支持多消息接收
        }catch (Exception e){
            System.out.println(e.getMessage());
            // 如果发生错误，那就一直回调函数，一直等待正确结果: web管理端还是未消费的数量
            channel.basicNack(message.getMessageProperties().getDeliveryTag(), true, false); // 1. 投递标识；2.是否支持多消息接收；3.是否将消息重新调回
        }

    }

}
